/// 1. newtype 模式用以在外部类型上实现外部 trait
/// - 孤儿规则（orphan rule）：只要 trait 或类型对于当前 crate 是本地的话就可以在此类型上实现该 trait。
/// - 一个绕开这个限制的方法是使用 newtype 模式（newtype pattern）。

use std::fmt;
struct Wrapper (Vec<String>);

impl fmt::Display for Wrapper {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "[{}]", self.0.join(", "))
    }
}

fn main() {
    let w = Wrapper(vec![String::from("hello"), String::from("world")]);
    println!("w is {}", w);
    println!("Hello, world!");
}
